#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//#include <queue>
//using namespace std;
//const int N = 2e5 + 10;
//typedef long long LL;
//typedef pair<LL, LL> PII;
//vector<PII> arr[N];
//int t, n;
//int main()
//{
//	cin >> t;
//	while (t--)
//	{
//		cin >> n;
//		queue<PII> q;
//		for (int i = 0; i < n; i++)
//		{
//			int a, b;
//			cin >> a >> b;
//			arr.push_back({b, a});
//		}
//			sort(arr.begin(), arr.end(), greater<PII>());
//		int sorce = 0;
//		LL ma = arr[0].second;
//		q.push(arr[0]);
//		sorce += arr[0].first;
//		for (int i = 1; i < n; i++)
//		{
//			if (q.size() > ma) break;
//			q.push(arr[i]);
//			sorce += arr[i].first;
//			ma = max(ma, arr[i].second);
//
//		}
//		cout << sorce << endl;
//	}
//	return 0;
//}
//
#include <iostream>
#include <queue>

using namespace std;
const int N = 2e5 + 10;
typedef long long LL;

typedef pair<LL, LL> PII;

int n, t;
vector<PII> arr[N];
int main()
{
	cin >> t;

	while (t--)
	{
		cin >> n;
		queue<PII> q;
		for (int i = 0; i < n; i++)
		{
			int a, b;
			cin >> a >> b;
			arr[a].push_back({b, a});
		}
		int ma = 0;
		int sorce = 0;
		for (int i = 1; i <= n; i++)
			sort(arr[i].begin(), arr[i].end(), greater<PII>());

		for (int i = 1; i <= n; i++)
		{

			if (arr[i].size() > 0)
			{
				ma = i;
				while (q.size() && q.front().second < arr[i].size()) q.pop();
				for (int j = 0; j < arr[i].size(); j++)
				{
					q.push(arr[i][j]);
					sorce += arr[i][j].first;
					if (q.size() == ma) break;
				}
			}
		}

		cout << sorce << endl;
	}
	return 0;
}
//#define  _CRT_SECURE_NO_WARNINGS
//#include <iostream>
//#include<queue>
//#include <set>
//using namespace std;
//
//int t;
//struct Cmp
//{
//    bool operator()(pair<int, int> a, pair<int, int> b) const
//    {
//        if (a.first == b.first)
//            return (a.second - b.second) > 0;
//
//        return (a.first - b.first) < 0;
//        return a.first == b.first ? a.second < b.second : a.first < b.first;
//    }
//};
//int main() {
//    cin >> t;
//    while (t--) {
//        int n; cin >> n;
//        multiset < pair<int, int>, Cmp> lamb;
//        while (n--) {
//            int a, b;
//            cin >> a >> b;
//            lamb.insert({ a,b });
//        }
//
//        int num = 0;
//        long long sum = 0;
//        queue<pair<pair<int, int>, int>>q;
//        for (auto a : lamb)
//            q.push({ a,0 });
//        queue<pair<pair<int, int>, int>>q;
//
//        while (q.size()) {
//            pair<pair<int, int>, int>tis = q.front();
//            q.push(tis);
//            q.pop();
//            sum += tis.first.second;
//            do {
//                if (!q.size())
//                    break;
//
//                tis = q.front();
//                if (tis.first.first <= q.size())
//                    q.pop();
//                else
//                    break;
//            } while (q.size());
//
//            while (q.size()) {
//                tis = q.front();
//                if (tis.first.first <= q.size())
//                    q.pop();
//                else
//                    break;
//            }
//
//        }
//        cout << sum << endl;
//    }
//    return 0;
//}